prehozeni Endianu
Otázka od: Jan Harman
8. 3. 2004 15:22
Zdravim vsechny,
prosim Vas, existuje nejaka funkce na prehozeni bytu v Cardinal (DWord)?
Diky moc.
Honza
Odpovedá: Petr Fejfar
8. 3. 2004 15:46
Jan Harman wrote:
> prosim Vas, existuje nejaka funkce na prehozeni bytu v Cardinal
> (DWord)? Diky moc.
Jeslli nevadi assembler, tak treba takhle:
function ReverseEndian(AValue:dword): dword; assembler;
asm
xchg al,ah
rol eax,16
xchg al,ah
end;
HTH, pf
Odpovedá: Slavomir Skopalik
8. 3. 2004 16:02
Tohle jsem si pred lety napsal
function Swap32(x:integer):integer;assembler; // Convert Big endian to
litle endian
asm // input is in eax
bswap eax
end; // output is in eax
Slavek
> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Jan Harman
> Sent: Monday, March 08, 2004 3:15 PM
> To: delphi-l@clexpert.cz
> Subject: prehozeni Endianu
>
>
> Zdravim vsechny,
> prosim Vas, existuje nejaka funkce na prehozeni bytu v
> Cardinal (DWord)? Diky moc. Honza
>
>
>
>
>
Odpovedá: petr palicka
8. 3. 2004 16:15
Ahoj,
jestli hotova nevim, ale resil bych to:
var
X: DWord;
begin
...
X:= (X shl 8) OR (X shr 8);
...
peca
Odpovedá: Petr Fejfar
8. 3. 2004 16:22
petr palicka wrote:
> X:= (X shl 8) OR (X shr 8);
Myslis, ze tahle funkce prevrati napr. hodnotu $1020304 na $4030201?
Ja bych takovy optimista nebyl
pf
Odpovedá: petr palicka
8. 3. 2004 16:23
> Myslis, ze tahle funkce prevrati napr. hodnotu $1020304 na $4030201?
> Ja bych takovy optimista nebyl
ehm, no, posun ma byt o 16 ne o 8 ,
jinak by to snad mohlo jit
kazdopadne v ASM to bude asi rychlejsi.
Peca
Odpovedá: Petr Fejfar
8. 3. 2004 17:21
petr palicka wrote:
> ehm, no, posun ma byt o 16 ne o 8 ,
> jinak by to snad mohlo jit
To ti jen prohodi Hi/Lo word, ale bajty zustanou v puvodnim poradi,
takze z toho $1020304 bys dostal $3040102. Jeste musis prehodit
bajty uvnitr slov, treba takhle:
(Swap(word(AValue)) shl 16) or Swap(word(AValue shr 16));
pf